/********************************************************************************************************************************
 * 《C ++ Primer》第五版中文版，读书笔记：按照书中的的示例源码和每一个小章节的课后习题，自己动手写代码实现，作为联系和测试。
 * Date: 2024-04-03 10:08
 * Author: dimon.chen 
 * EMali: 1181302388@qq.com 
 * 
 * 章节: 第三章 字符串，向量和数组
 *       3.6 节练习
 * 
 ********************************************************************************************************************************/

#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <cstddef>
#include <cstring>

using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::vector;

int main(int argc, char *argv[])
{
    ///
    /// 练习3.6 节练习
    /// 练习3.43 编写3个不同版本的程序，令其就能输出ia的元素。版本1使用范围for管理迭代器，版本2和版本3都将使用普通的for语句，其阿红版本2
    /// 要求使用下边运算符，版本3使用指针
    ///

    constexpr int rowcnt = 3;
    constexpr int colcnt = 4;
    int ia[rowcnt][colcnt];

    for(size_t i = 0; i < rowcnt; i++){
        for(size_t j = 0; j<colcnt; j++){
            ia[i][j] = i * colcnt + j;
        }
    }



    /// version 1
    cout << "version 1" << endl;
    for(auto &row : ia){
        for(auto &col: row){
            cout << col << " ";
        }
        cout << endl;
    }

    ///version 2
    cout << "version 2" << endl;
    for(size_t i=0; i<rowcnt; i++){
        for(size_t j=0; j<colcnt; j++){
            cout << ia[i][j] << " ";
        }
        cout << endl;
    }

    ///version3
    cout << "version 3" << endl;
    int (*prow)[4] = nullptr;
    for(prow=ia; prow != ia+3; prow++){
        for(int *p = *prow; p<*prow+4; p++){
            cout << *p << " ";
        }
        cout << endl;
    }
}